package ln.javatest.day18.demo01;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/*
java.lang.class
Class对象的功能：
  获取功能：
    1）获取成员方法们
        method[] getMethods():获取所有public修饰的方法
        method getMethod(String name, 类<?>... parameterTypes):获取指定名称的方法

        method[] getDeclaredMethods()
        method getDeclaredMethod(String name, 类<?>... parameterTypes)
    2）Method方法对象
        执行方法：Object invoke（Object obj,Object... args)
        获取方法名称：String getName:获取方法名
        暴力反射：method.setAccessibe(true);
*/
public class ReflectDemo4 {
    public static void main(String[] args) throws Exception {
        //1.先获取Person的class对象
        Class personClass = Person.class;
        //method getMethod(String name, 类<?>... parameterTypes)
        //method getMethod(String name, 类<?>... parameterTypes):获取指定名称的方法
        Method eat_method = personClass.getMethod("eat");
        Person p = new Person();
        //执行方法
        eat_method.invoke(p);

        Method eat_food = personClass.getMethod("eat",String.class);
        //执行方法
        eat_food.invoke(p,"饭");

        //获取所有public修饰的方法
        //因为Person类继承了Object类，，所以Object类中的public方法也会打印出来
        Method[] method = personClass.getMethods();
        for (Method method1 : method) {
            System.out.println(method1);
        }
    }
}
